// HeuristicObject.h: interface for the HeuristicObject class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HEURISTICOBJECT_H__2A04EA00_B4AD_4B75_8BAA_049F2D050C62__INCLUDED_)
#define AFX_HEURISTICOBJECT_H__2A04EA00_B4AD_4B75_8BAA_049F2D050C62__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "defsSolver.h"
#include "Parameters.h"
#include "Pancake.h"




class HeuristicObject  
{
	UCHAR *huristicTable;
	int *tilePosForGetH;

	GameObject *topSpinObj;
	Parameters *parm;
	void ConverteTilesToTilesPos(int pop[SIZE], int tilepos[PATTERNSIZE]);
	I64  hash(int tiles[PATTERNSIZE]);
	int GetHuristicRegular(int state[SIZE]);
	int arrPatternLocation[SIZE]; // if the tile is not part of the pattern have the value -1 else its location
	void AnalyzePattern(char *patternFileName);

public:
	int currentHeuristicNumber;
	int currentUseCutOff;

	void Reset();
	HeuristicObject();
	virtual ~HeuristicObject();
	void Initialize(Parameters *in_parm,GameObject *in_topSpinObj);
	int eval(int state[SIZE]);
	void AnalysePDB();

};

#endif // !defined(AFX_HEURISTICOBJECT_H__2A04EA00_B4AD_4B75_8BAA_049F2D050C62__INCLUDED_)
